package state;

/**
 * 状态模式
 * 允许一个对象在其内部状态改变时改变它的行为，对象看起来似乎修改了他的类
 * 其实就是 在某些状态下，是一个行为，在另一些状态下，是另外的行为，根据类的状态（成员变量）来改变
 * 举个例子：人不同的阶段
 *   10岁以前的人，玩的是泥巴，
 *   10——30岁的人，玩的是电脑，
 *   30-50岁的人，玩的是报纸。
 *   那么age就是状态，而不同年龄段玩的方式不同，也就是状态模式里面不同的行为
 *
 *   再说一下状态模式和策略模式的区别，他们的类图特别的相似，大家可以百度一下做对比。
 *   但是我们观察他们的时序图，就能发现一些端倪。
 *   他们的核心区别就在于，策略模式是客户端来引发的改变，
 *   而状态模式是由于环境变量的某些行为（调用方法），引发了自身状态（成员变量或者其他变化）的改变，
 *   一个是客户端的改变，一个是环境变量自身的改变。
 */
public class Client {

    public static void main(String[] args) {
        Context context = new Context();
        context.request();
        context.request();
        context.request();
        context.request();
        //print:
        //  ConcreteStateA action...
        //  ConcreteStateB action...
        //  ConcreteStateB action...
        //  ConcreteStateB action...

    }
}
